"""
配置数据管理模块

职责：
- 管理配置数据的存储和更新
- 处理工作表数据的组织
- 提供配置数据的访问接口
"""


class ConfigManager:
    """配置数据管理器"""
    
    def __init__(self):
        """初始化配置管理器"""
        # 全局配置数据，格式: {config_name: {value: str, sheet: str}}
        self.config_data = {}
        
        # 按工作表存储配置数据，格式: {sheet_name: {config_name: {value: str}}}
        self.sheets_data = {}
        
        # 存储UI组件引用
        self.sheet_frames = {}      # 存储各个工作表的框架
        self.sheet_entries = {}     # 存储各个工作表的配置项输入框
    
    def add_sheet(self, sheet_name):
        """
        为新工作表创建数据存储空间
        
        参数:
            sheet_name (str): 工作表名称
        """
        if sheet_name not in self.sheet_entries:
            self.sheet_entries[sheet_name] = []
        if sheet_name not in self.sheets_data:
            self.sheets_data[sheet_name] = {}
    
    def remove_sheet(self, sheet_name):
        """
        删除工作表的数据存储
        
        参数:
            sheet_name (str): 工作表名称
        """
        if sheet_name in self.sheet_entries:
            del self.sheet_entries[sheet_name]
        if sheet_name in self.sheets_data:
            del self.sheets_data[sheet_name]
    
    def add_config_entry(self, sheet_name, name_entry, value_entry):
        """
        添加配置项引用
        
        参数:
            sheet_name (str): 工作表名称
            name_entry: 名称输入框对象
            value_entry: 值输入框对象
        """
        if sheet_name in self.sheet_entries:
            self.sheet_entries[sheet_name].append({
                "name": name_entry,
                "value": value_entry
            })
    
    def remove_config_entry(self, sheet_name, entry):
        """
        删除配置项引用
        
        参数:
            sheet_name (str): 工作表名称
            entry: 要删除的配置项
        """
        if sheet_name in self.sheet_entries:
            if entry in self.sheet_entries[sheet_name]:
                self.sheet_entries[sheet_name].remove(entry)
    
    def update_config_data(self):
        """
        更新全局配置数据
        遍历所有工作表的配置项，将其收集到config_data中
        """
        self.config_data = {}
        self.sheets_data = {}
        
        # 遍历所有工作表并收集配置数据
        for sheet_name, entries in self.sheet_entries.items():
            sheet_config = {}
            
            for entry in entries:
                name = entry["name"].get().strip()
                value = entry["value"].get().strip()
                
                if name:  # 只处理有名称的配置项
                    # 所有数据都当字符串处理
                    sheet_config[name] = {
                        "value": value
                    }
                    
                    # 添加到总配置数据（带上工作表前缀）
                    full_name = f"[{sheet_name}] {name}"
                    self.config_data[full_name] = {
                        "value": value,
                        "sheet": sheet_name
                    }
            
            self.sheets_data[sheet_name] = sheet_config
    
    def get_sheet_config(self, sheet_name):
        """
        获取特定工作表的配置数据
        
        参数:
            sheet_name (str): 工作表名称
            
        返回:
            dict: 该工作表的配置数据
        """
        return self.sheets_data.get(sheet_name, {})
    
    def get_all_sheets(self):
        """
        获取所有工作表名称
        
        返回:
            list: 工作表名称列表
        """
        return list(self.sheet_entries.keys())
    
    def clear_all(self):
        """清空所有配置数据"""
        self.config_data = {}
        self.sheets_data = {}
        self.sheet_entries = {}
        self.sheet_frames = {}
